Los documentos en los que trabajo son así:
{ "id" : "98syf87erfw8n" "foo" : { "objectid" : "39", "stuff" : "65" }, "yearpublished" : "1979", . . . }Esta es la consulta que utilicé:
db.foobar.aggregate([ { $group : { _id : '$yearpublished', myItem: { $first: "$$ROOT" } }} ])La salida final tiene la forma:
{ { "_id" : "1923", "myItem" : { "id" : "98syf87erfw8n", "foo" : { "objectid" : "39", "stuff" : "65" }, "yearpublished" : "1979" } }, { "_id" : "1453", "myItem" : { "id" : "88888888888", "foo" : { "objectid" : "394", "stuff" : "55" }, "yearpublished" : "1453" "author" : "Ravi Kiran" } } };Pero quiero la salida como:
{ "id" : "98syf87erfw8n", "foo" : { "objectid" : "39", "stuff" : "65" }, "yearpublished" : "1979" }, { "id" : "88888888888", "foo" : { "objectid" : "394", "stuff" : "55" }, "yearpublished" : "1453", "author" : "Ravi Kiran" } Esto significa que quiero sacar esos documentos dentro del campo myItem . ¿Cómo puedo hacer eso?
Podrías usar $replaceRoot
db.collection.aggregate({ "$replaceRoot": { "newRoot": "$myItem" } })Hay errores de sintaxis en su salida.
"id" : 98syf87erfw8n , no es válido.
Debería ser "id" : "98syf87erfw8n" , tenga en cuenta las comillas
Falta una coma después de yearPublished en el segundo objeto.
Una etapa más del proyecto después de que $group pueda hacer el trabajo:
{ $project: { yearpublished: "$myItem.yearpublished", foo: "$myItem.foo", id: "$myItem.id", _id: 0 } }